package com.atguigu.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * 1.@RequestMappping 注解标识位置
 *  @RequestMapping 标识一个类：设置映射请求的请求路径的初始信息
 *  @RequestMapping 标识一个方法：设置映射请求请求路径的具体信息
 * 2.@RequestMapping注解value属性
 *  作用：通过请求的请求路径匹配请求
 *  value属性是数组类型，即当前浏览器所发送请求的请求路径匹配value属性中的任何一个值
 *  则当前请求就会被注解所标识的方法进行处理
 * 3.@RequestMapping注解的method属性
 *  作用：通过请求的请求方式匹配请求
 *  method属性是RequestMethod类型的数组，
 *  即当前浏览器发送的请求的请求方式匹配method属性中的任何一个请求方式
 *  则当前请求就会被注解所标识的方法进行处理
 *  若浏览器发送的请求的请求路径和@RequestMapping注解的value属性匹配，但是请求方式不匹配
 *  此时页面报错：405 - Request method 'xxx' not supported
 *  在@RequestMapping的基础上，结合一些派生的注解：
 *  @GetMapping，@PostMapping，@DeleteMapping，@PutMapping
 * 4.@RequestMapping注解的params属性
 *  作用：@RequestMapping注解的params属性通过请求的请求参数匹配请求映射
 *  "param"：要求请求映射所匹配的请求必须携带param请求参数
 *  "!param"：要求请求映射所匹配的请求必须不能携带param请求参数
 *  "param=value"：要求请求映射所匹配的请求必须携带param请求参数且param=value
 *  "param!=value"：要求请求映射所匹配的请求必须携带param请求参数但是param!=value
 *  若当前请求满足@RequestMapping注解的value和method属性，但是不满足params属性，此时
 *  页面回报错400：Parameter conditions "username, password!=123456" not met for actual
 * request parameters: username={admin}, password={123456}
 * 5.@RequestMapping注解的header属性
 *  作用：@RequestMapping注解的headers属性通过请求的请求头信息匹配请求映射
 *  "header"：要求请求映射所匹配的请求必须携带header请求头信息
 *  "!header"：要求请求映射所匹配的请求必须不能携带header请求头信息
 *  "header=value"：要求请求映射所匹配的请求必须携带header请求头信息且header=value
 *  "header!=value"：要求请求映射所匹配的请求必须携带header请求头信息且header!=value
 *  若当前请求满足@RequestMapping注解的value和method属性，但是不满足headers属性，此时页面
 *  显示404错误，即资源未找到
 * 6.SpringMVC支持ant风格的路径
 *  ？：表示任意的单个字符
 *  *：表示任意的0个或多个字符
 *  **：表示任意层数的任意目录
 *  注意：在使用**时，只能把**放在//中使用
 * 7.@RequestMapping 注解的使用路径中的占位符
 *  传统方式：/deleteUser?id=1
 *  rest方式：/user/delete/1
 *  需要在@RequestMapping注解的value属性中所设置的路径中，使用{xxx}的方式表示路径中的数据
 *  在通过@PathVariable注解，将占位符所表示的值和控制器方法的形参进行绑定
 */
@Controller
//@RequestMapping("/test")
public class TestRequestMappingController {

    //此时控制器方法所匹配的请求的请求路径为/test/hello
    @RequestMapping(
            value = {"/hello", "/abc"},
            method = {RequestMethod.GET, RequestMethod.POST}
            //method = RequestMethod.GET
            //method = RequestMethod.POST
    )
    public String hello(){
        return "success";
    }

    @RequestMapping("/test/rest/{id}")
    public String testRest(@PathVariable("id") Integer id) {
        System.out.println(id);
        return "success";
    }
}
